import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
import { useUserStore } from './userStore';

export const useCartStore = defineStore('cart', () => {
  const userStore = useUserStore();
  
  // 购物车商品列表
  const cartItems = ref([]);
  
  // 收货地址列表
  const addresses = ref([]);
  
  // 计算总数量
  const itemCount = computed(() => {
    return cartItems.value.reduce((total, item) => total + item.quantity, 0);
  });
  
  // 计算总金额
  const totalAmount = computed(() => {
    return cartItems.value.reduce((total, item) => total + item.price * item.quantity, 0);
  });
  
  // 添加商品到购物车
  const addToCart = async (item) => {
    if (!userStore.isLoggedIn) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return false;
    }
    
    try {
      console.log('开始添加商品到购物车，原始商品数据:', item);
      
      // 构建完整的商品数据
      const cartItem = {
        id: item.id,
        title: item.title,
        price: item.price,
        image: item.image,
        quantity: item.quantity || 1,
        specs: item.specs || {},
        category: item.category,
        total: item.total || (item.price * (item.quantity || 1))
      };
      
      console.log('构建后的商品数据:', cartItem);
      console.log('用户账号:', userStore.userInfo.account);
      
      // 准备云函数调用参数
      const cloudParams = {
        action: 'add',
        account: userStore.userInfo.account,
        data: {
          item: cartItem
        }
      };
      
      console.log('发送给云函数的完整参数:', JSON.stringify(cloudParams));
      
      const result = await uniCloud.callFunction({
        name: 'cartManage',
        data: cloudParams
      });
      
      console.log('云函数返回结果:', result);
      
      if (result.result && result.result.success) {
        console.log('添加商品成功，开始更新本地数据');
        // 更新本地购物车数据
        await loadFromCloud();
        return true;
      } else {
        console.error('添加商品失败，错误信息:', result.result?.message);
        throw new Error(result.result?.message || '添加商品失败');
      }
    } catch (error) {
      console.error('添加商品失败，完整错误信息:', error);
      uni.showToast({
        title: error.message || '添加商品失败',
        icon: 'none'
      });
      return false;
    }
  };
  
  // 更新商品数量
  const updateQuantity = async (index, quantity) => {
    if (!userStore.isLoggedIn) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return false;
    }
    
    try {
      // 先更新本地数据
      cartItems.value[index].quantity = quantity;
      
      const result = await uniCloud.callFunction({
        name: 'cartManage',
        data: {
          action: 'update',
          account: userStore.userInfo.account,
          data: {
            items: cartItems.value
          }
        }
      });
      
      if (!result.result || !result.result.success) {
        throw new Error(result.result?.message || '更新数量失败');
      }
      
      return true;
    } catch (error) {
      console.error('更新数量失败:', error);
      uni.showToast({
        title: error.message || '更新数量失败',
        icon: 'none'
      });
      return false;
    }
  };
  
  // 移除商品
  const removeFromCart = async (index) => {
    if (!userStore.isLoggedIn) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return false;
    }
    
    try {
      const itemId = cartItems.value[index].id;
      
      const result = await uniCloud.callFunction({
        name: 'cartManage',
        data: {
          action: 'remove',
          account: userStore.userInfo.account,
          data: {
            itemId: itemId
          }
        }
      });
      
      if (!result.result || !result.result.success) {
        throw new Error(result.result?.message || '移除商品失败');
      }
      
      // 更新成功后再更新本地数据
      cartItems.value.splice(index, 1);
      return true;
    } catch (error) {
      console.error('移除商品失败:', error);
      uni.showToast({
        title: error.message || '移除商品失败',
        icon: 'none'
      });
      return false;
    }
  };
  
  // 清空购物车
  const clearCart = async () => {
    if (!userStore.isLoggedIn) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return false;
    }
    
    try {
      const result = await uniCloud.callFunction({
        name: 'cartManage',
        data: {
          action: 'clear',
          account: userStore.userInfo.account
        }
      });
      
      if (result.result && result.result.success) {
        cartItems.value = [];
        return true;
      } else {
        throw new Error(result.result?.message || '清空购物车失败');
      }
    } catch (error) {
      console.error('清空购物车失败:', error);
      uni.showToast({
        title: error.message || '清空购物车失败',
        icon: 'none'
      });
      return false;
    }
  };
  
  // 添加收货地址
  const addAddress = (address) => {
    addresses.value.push(address);
  };
  
  // 更新收货地址
  const updateAddress = (index, address) => {
    addresses.value[index] = address;
  };
  
  // 删除收货地址
  const removeAddress = (index) => {
    addresses.value.splice(index, 1);
  };
  
  // 从云端加载购物车数据
  const loadFromCloud = async () => {
    if (!userStore.isLoggedIn) {
      return false;
    }
    
    try {
      const result = await uniCloud.callFunction({
        name: 'cartManage',
        data: {
          action: 'get',
          account: userStore.userInfo.account
        }
      });
      
      if (result.result && result.result.success) {
        cartItems.value = result.result.data;
        return true;
      } else {
        throw new Error(result.result?.message || '加载购物车失败');
      }
    } catch (error) {
      console.error('加载购物车失败:', error);
      return false;
    }
  };
  
  // 从本地存储加载
  const loadFromStorage = async () => {
    if (userStore.isLoggedIn) {
      // 如果已登录，从云端加载
      await loadFromCloud();
    } else {
      // 如果未登录，从本地存储加载
      const savedItems = uni.getStorageSync('cart-items');
      if (savedItems) {
        cartItems.value = JSON.parse(savedItems);
      }
    }
  };
  
  // 保存到本地存储
  const saveToStorage = () => {
    if (!userStore.isLoggedIn) {
      uni.setStorageSync('cart-items', JSON.stringify(cartItems.value));
    }
  };

  return {
    cartItems,
    addresses,
    itemCount,
    totalAmount,
    addToCart,
    updateQuantity,
    removeFromCart,
    clearCart,
    addAddress,
    updateAddress,
    removeAddress,
    loadFromStorage,
    saveToStorage,
    loadFromCloud
  };
});

// 添加省市区数据
export const regionData = {
  '江西省': {
    '上饶市': ['信州区', '广丰区', '玉山县', '铅山县', '横峰县', '弋阳县', '余干县', '鄱阳县', '万年县', '婺源县'],
    '南昌市': ['东湖区', '西湖区', '青云谱区', '湾里区', '青山湖区', '新建区', '南昌县', '安义县', '进贤县'],
    '九江市': ['浔阳区', '濂溪区', '柴桑区', '武宁县', '修水县', '永修县', '德安县', '都昌县', '湖口县', '彭泽县'],
  }
}; 